Unit Testing এবং Integration Testing হল সফটওয়্যার ডেভেলপমেন্টের দুইটি গুরুত্বপূর্ণ টেস্টিং প্রক্রিয়া, যা কোডের বৈধতা যাচাই এবং বিভিন্ন সিস্টেমের কার্যক্ষমতা নিশ্চিত করতে ব্যবহৃত হয়। এগুলোর মধ্যে পার্থক্য এবং কিভাবে Angular অ্যাপ্লিকেশনে এগুলি প্রয়োগ করা যায় তা এখানে বিস্তারিত আলোচনা করা হবে।
Unit Testing হল একটি সফটওয়্যার টেস্টিং পদ্ধতি যেখানে একটি ছোট অংশ বা ইউনিট (যেমন ফাংশন বা মেথড) আলাদাভাবে টেস্ট করা হয়। ইউনিট টেস্টিং মূলত কোডের প্রত্যেকটি ছোট অংশ সঠিকভাবে কাজ করছে কিনা তা যাচাই করে। এটি সাধারণত স্বতন্ত্রভাবে কাজ করা মেথড, ফাংশন বা ক্লাসের জন্য ব্যবহৃত হয়।
Angular প্রজেক্টে Unit Testing করতে, আমরা সাধারণত Jasmine (টেস্ট ফ্রেমওয়ার্ক) এবং Karma (টেস্ট রানার) ব্যবহার করি। এগুলো Angular CLI-তে ডিফল্টভাবে কনফিগার করা থাকে।
ধরা যাক, একটি সিম্পল ফাংশন রয়েছে যা দুটি সংখ্যার যোগফল বের করে:
// sum.service.ts
export class SumService {
add(a: number, b: number): number {
return a + b;
}
}
এখন এই add()
মেথডটির জন্য একটি ইউনিট টেস্ট লিখি:
// sum.service.spec.ts
import { TestBed } from '@angular/core/testing';
import { SumService } from './sum.service';
describe('SumService', () => {
let service: SumService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(SumService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should add two numbers correctly', () => {
expect(service.add(2, 3)).toBe(5);
expect(service.add(-1, 1)).toBe(0);
expect(service.add(0, 0)).toBe(0);
});
});
এখানে:
SumService
তৈরি করা হচ্ছে।add()
মেথডের কার্যকারিতা পরীক্ষা করছে।Integration Testing হল টেস্টিং পদ্ধতি যেখানে বিভিন্ন ইউনিট বা মডিউল একত্রে টেস্ট করা হয়, অর্থাৎ একাধিক অংশকে একত্রে পরীক্ষা করা হয় যাতে তারা সঠিকভাবে একে অপরের সাথে কাজ করছে কিনা তা নিশ্চিত করা যায়। এটি Unit Testing এর পরবর্তী ধাপ, যেখানে প্রতিটি ইউনিট একে অপরের সাথে ইন্টিগ্রেট হয়ে কাজ করতে পারে।
Angular অ্যাপ্লিকেশনে Integration Testing করা হয় সাধারণত পুরো কম্পোনেন্ট বা সার্ভিসের কার্যকারিতা পরীক্ষা করে। এখানে আমরা HttpClient এবং HttpTestingController ব্যবহার করে API কলের ইন্টিগ্রেশন টেস্ট লিখব।
ধরা যাক, একটি সিম্পল সার্ভিস রয়েছে যা API থেকে ডেটা ফেচ করে:
// data.service.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor(private http: HttpClient) {}
getData(): Observable<any> {
return this.http.get('https://api.example.com/data');
}
}
এখন, এই সার্ভিসের জন্য একটি ইন্টিগ্রেশন টেস্ট লিখি যেখানে আমরা HTTP কল এবং তার রেসপন্স যাচাই করব:
// data.service.spec.ts
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { DataService } from './data.service';
describe('DataService', () => {
let service: DataService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [DataService]
});
service = TestBed.inject(DataService);
httpMock = TestBed.inject(HttpTestingController);
});
it('should fetch data from the API', () => {
const mockData = { id: 1, name: 'Test' };
service.getData().subscribe(data => {
expect(data).toEqual(mockData);
});
const req = httpMock.expectOne('https://api.example.com/data');
expect(req.request.method).toBe('GET');
req.flush(mockData); // Simulate API response
});
afterEach(() => {
httpMock.verify(); // Ensure no outstanding HTTP requests
});
});
এখানে:
Unit Testing | Integration Testing |
---|---|
ছোট অংশ (ফাংশন, মেথড, ক্লাস) পরীক্ষা করা হয়। | একাধিক ইউনিট বা মডিউল একত্রে পরীক্ষা করা হয়। |
সাধারণত মক ডেটা ব্যবহার করা হয়। | বাহ্যিক সার্ভিস বা ডেটাবেসের সাথে কাজ করা হয়। |
দ্রুত রান হয় এবং দ্রুত সমস্যা খুঁজে বের করা যায়। | সময়সাপেক্ষ এবং বৃহত্তর পরীক্ষার অংশ। |
শুধুমাত্র একটি ইউনিটের কার্যকারিতা যাচাই করা হয়। | বিভিন্ন ইউনিটের একত্রিত কার্যকারিতা যাচাই করা হয়। |
Unit Testing এবং Integration Testing সফটওয়্যার টেস্টিংয়ের দুটি গুরুত্বপূর্ণ ধাপ। Unit Testing কোডের ছোট অংশ (ফাংশন বা মেথড) পরীক্ষা করে, আর Integration Testing একাধিক অংশ একত্রে কাজ করছে কিনা তা পরীক্ষা করে। Angular অ্যাপ্লিকেশনে Jasmine এবং Karma ব্যবহার করে ইউনিট টেস্টিং করা হয়, এবং HttpTestingController ব্যবহার করে ইন্টিগ্রেশন টেস্টিং করা হয়। দুটি টেস্টিং পদ্ধতি সফটওয়্যার ডেভেলপমেন্টের গুণগত মান এবং কার্যকারিতা নিশ্চিত করতে সাহায্য করে।
Read more